package org.example.managere.service.feibiao;

import org.example.managere.dto.feibiao.AmArchivesDegradationDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * 电机性能退化监测服务接口
 */
public interface AmArchivesDegradationService {
    
    /**
     * 保存电机性能退化记录
     * @param amArchivesDegradationDto 电机性能退化记录DTO
     * @return 保存后的电机性能退化记录DTO
     */
    AmArchivesDegradationDto save(AmArchivesDegradationDto amArchivesDegradationDto);
    
    /**
     * 根据ID查找电机性能退化记录
     * @param degradationId 退化记录ID
     * @return 可能包含电机性能退化记录的Optional
     */
    Optional<AmArchivesDegradationDto> findById(Integer degradationId);
    
    /**
     * 更新电机性能退化记录
     * @param amArchivesDegradationDto 电机性能退化记录DTO
     * @return 更新后的电机性能退化记录DTO
     */
    AmArchivesDegradationDto update(AmArchivesDegradationDto amArchivesDegradationDto);
    
    /**
     * 删除电机性能退化记录
     * @param degradationId 退化记录ID
     */
    void deleteById(Integer degradationId);
    
    /**
     * 查找所有电机性能退化记录
     * @return 电机性能退化记录DTO列表
     */
    List<AmArchivesDegradationDto> findAll();
    
    /**
     * 根据电机ID查询性能退化记录
     * @param motorId 电机ID
     * @return 电机性能退化记录DTO列表
     */
    List<AmArchivesDegradationDto> findByMotorId(String motorId);
    
    /**
     * 根据测量时间范围查询性能退化记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 电机性能退化记录DTO列表
     */
    List<AmArchivesDegradationDto> findByMeasurementTimeBetween(Date startTime, Date endTime);
    
    /**
     * 查询剩余寿命预测低于指定值的性能退化记录
     * @param threshold 阈值
     * @return 电机性能退化记录DTO列表
     */
    // List<AmArchivesDegradationDto> findByRemainingLifePredictionLessThan(Double threshold);
    
    /**
     * 查询特定电机在指定时间范围内的性能退化记录
     * @param motorId 电机ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 电机性能退化记录DTO列表
     */
    List<AmArchivesDegradationDto> findByMotorIdAndTimeRange(String motorId, Date startTime, Date endTime);
    
    /**
     * 分页查询电机性能退化记录
     * @param motorId 电机ID
     * @param pageable 分页参数
     * @return 电机性能退化记录DTO分页结果
     */
    Page<AmArchivesDegradationDto> findAll(String motorId, Pageable pageable);
} 